using System;
using System.ComponentModel;
using System.Collections.Generic;
using Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Request;
using Sinacor.Servico.Bovespa.Ordens.BusinessEntity;

namespace Sinacor.Servico.Bovespa.Ordens.Service.ServiceImplementation.Translator
{
    public class TranslateConsultarOrdensManutencaoOrdens
    {
        /// <summary>
        /// Data : 20/01/2008**
        /// Autor: Eduardo Sertorio
        /// Obs.: Criacao
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>        
        public static BusinessEntity.Ordem TranslateToOrdem(DataContract.Request.ConsultarOrdensManutencaoOrdensRequest from)
        {
            if (from == null)
                return null;

            BusinessEntity.Ordem to = new BusinessEntity.Ordem();
            //TORMOVD - na mesma ordem da consulta - eduardo - 20080120**
            to.CodigoUsuarioOrdem = from.CodigoUsuarioOrdem; //CD_CODUSU
            to.Situacao = from.Situacao; //IN_SITUAC
            to.DataValidade = from.DataValidade; //DT_VALORD
            to.DataPregao = from.DataPregao; //usado na falta do DT_VALORD 
            to.DataOrdem = from.DataOrdem; //DT_DATORD //CHAVE-3.1
            to.NumeroOrdem = from.NumeroOrdem; //NR_SEQORD //CHAVE-3.2
            to.NumeroOrdemSubSequencia = from.NumeroOrdemSequencia; //NR_SUBSEQ //CHAVE-3.3
            to.NumeroOrdemOriginal = from.NumeroOrdemOriginal; //NR_SEQORD_ORI*
            to.NaturezaOperacao = (BusinessEntity.Enum.TipoNaturezaOperacao?) from.NaturezaOperacao; //CD_NATOPE
            to.IndicadorOrdemAbertaAdminCon = from.IndicadorOrdemAbertaAdminCon; //IN_ADMIN_CON*
            to.TipoMercado = (BusinessEntity.Enum.TipoMercado?)from.TipoMercado; //CD_MERCAD
            to.TipoOrdem = new List<BusinessEntity.Enum.TipoOrdem>(); //TP_ORDEM
            if (from.TipoOrdem != null)
            {
                foreach (Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Enum.TipoOrdem itemTipoOrdem in from.TipoOrdem) 
                { 
                    to.TipoOrdem.Add((Sinacor.Servico.Bovespa.Ordens.BusinessEntity.Enum.TipoOrdem)itemTipoOrdem); 
                } 
            }
            to.CodigoCliente = from.CodigoCliente; //CD_CLIENTE
            to.ApelidoCliente = from.ApelidoCliente; //CD_CLIENTE
            to.PercentualReducaoAcrescimo = from.PercentualReducaoAcrescimo; //PC_REDACR
            to.CodigoCarteira = from.CodigoCarteira; //CD_CARLIQ*
            to.TipoLiquidacao = from.IndicadorLiquidacao; //IN_LIQUIDA*
            to.Titulo = from.Titulo; //CD_NEGOCIO
            to.VencimentoTermo = from.VencimentoTermo; //TP_VCOTER*
            to.Cambio = from.Cambio; //VL_DOLAR*
            to.ValorFinanciado = from.ValorFinanciado; //VL_FINANC*
            to.TaxaFinanciamento = from.TaxaFinanciamento; //PC_FINANC*
            to.Quantidade = from.Quantidade; //QT_ORDEM
            to.QuantidadeAnexo4 = from.QuantidadeAnexo4; //QT_ANEXO4*
            to.QuantidadeAnexo5 = from.QuantidadeAnexo5; //QT_ANEXO5*
            to.Preco = from.Preco; //VL_PREPAP
            to.Bolsa = from.Bolsa; //CD_BOLSA

            //nao utilizado na consulta, apenas na resposta
            ////to.HoraOrdem = from.HoraOrdem; //DT_HORORD            
            ////to.DigitoCliente = from.DigitoCliente; //DV_CLIENTE*
            ////to.CodigoBroker = from.CodigoBroker; //CD_LIQFIN*
            ////to.IndicadorPessoaVinculada = from.IndicadorPessoaVinculada; //IN_PESVIN
            ////to.TipoFax = from.TipoFax; //TP_DOCFAX //incluido/descomentado - eduardo - 20080119
            ////to.QuantidadeCasada = from.QuantidadeCasada; //QT_ORDEXEC
            ////to.IndicadorDistribuicao = from.IndicadorDistribuicao; //IN_DISTRIB*
            ////to.NomeCliente = from.NomeCliente; //NM_CLIENTE
            ////to.IndicadorChamadaLog = from.IndicadorChamadaLog; //IN_TRIGGER*
            ////to.IndicadorDesprezaSaldo = from.IndicadorDesprezaSaldo; //IN_DESSALDO*
            ////to.NomeEmissorOrdem = from.NomeEmissorOrdem; //NM_EMIT_ORDEM*
            ////to.CodigoCasamento = from.CodigoCasamento; //CD_CODCAS*
            ////to.IndicadorOrdemFilaCasamento = from.IndicadorOrdemFilaCasamento; //IN_CASAORD*

            //////extras
            ////to.NomeOperador = from.NomeOperador;
            ////to.Saldo = from.Saldo;
            ////to.ApelidoCliente = from.ApelidoCliente; //NM_APELIDO
            
            return to;
        }

        /// <summary>
        /// Data : 20/01/2008**
        /// Autor: Eduardo Sertorio
        /// Obs.: Criacao
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public static DataContract.Response.OrdemResponse TranslateToOrdemResponse(BusinessEntity.Ordem from)
        {

            if (from == null)
                return null;

            DataContract.Response.OrdemResponse to = new DataContract.Response.OrdemResponse();

            //TORMOVD - na mesma ordem da tabela - eduardo - 20080120*
            to.Situacao = from.Situacao; //IN_SITUAC
            to.CodigoUsuarioOrdem = from.CodigoUsuarioOrdem; //CD_CODUSU
            to.Bolsa = from.Bolsa; //CD_BOLSA
            to.DataOrdem = from.DataOrdem.Value; //DT_DATORD //CHAVE-3.1
            to.NumeroOrdem = from.NumeroOrdem.Value; //NR_SEQORD //CHAVE-3.2
            to.NumeroOrdemSequencia = from.NumeroOrdemSubSequencia.Value; //NR_SUBSEQ //CHAVE-3.3
            to.HoraOrdem = from.HoraOrdem; //DT_HORORD            
            to.TipoOrdem = new BindingList<Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Enum.TipoOrdem>(); foreach (Sinacor.Servico.Bovespa.Ordens.Service.DataContract.Enum.TipoOrdem itemTipoOrdem in from.TipoOrdem) { to.TipoOrdem.Add(itemTipoOrdem); } //TP_ORDEM
            to.TipoMercado = (DataContract.Enum.TipoMercado?)from.TipoMercado; //CD_MERCAD
            to.Quantidade = from.Quantidade; //QT_ORDEM
            to.Titulo = from.Titulo; //CD_NEGOCIO
            to.CodigoCliente = from.CodigoCliente; //CD_CLIENTE
            to.DigitoCliente = from.DigitoCliente; //DV_CLIENTE*
            to.CodigoBroker = from.CodigoBroker; //CD_LIQFIN*
            to.IndicadorPessoaVinculada = from.IndicadorPessoaVinculada; //IN_PESVIN
            to.NaturezaOperacao = (DataContract.Enum.TipoNaturezaOperacao?)from.NaturezaOperacao; //CD_NATOPE
            to.Preco = from.Preco; //VL_PREPAP
            to.TipoFax = from.TipoFax; //TP_DOCFAX //incluido/descomentado - eduardo - 20080119
            to.PercentualReducaoAcrescimo = from.PercentualReducaoAcrescimo; //PC_REDACR
            to.QuantidadeCasada = from.QuantidadeCasada; //QT_ORDEXEC
            to.CodigoCarteira = from.CodigoCarteira; //CD_CARLIQ*
            to.IndicadorLiquidacao = from.TipoLiquidacao; //IN_LIQUIDA*
            to.DataValidade = from.DataValidade; //DT_VALORD
            to.IndicadorDistribuicao = from.IndicadorDistribuicao; //IN_DISTRIB*
            to.NomeCliente = from.NomeCliente; //NM_CLIENTE
            to.IndicadorChamadaLog = from.IndicadorChamadaLog; //IN_TRIGGER*
            to.TaxaFinanciamento = from.TaxaFinanciamento; //PC_FINANC*
            to.ValorFinanciado = from.ValorFinanciado; //VL_FINANC*
            to.VencimentoTermo = from.VencimentoTermo; //TP_VCOTER*
            to.IndicadorDesprezaSaldo = from.IndicadorDesprezaSaldo; //IN_DESSALDO*
            to.NomeEmissorOrdem = from.NomeEmissorOrdem; //NM_EMIT_ORDEM*
            to.CodigoCasamento = from.CodigoCasamento; //CD_CODCAS*
            to.QuantidadeAnexo5 = from.QuantidadeAnexo5; //QT_ANEXO5*
            to.QuantidadeAnexo4 = from.QuantidadeAnexo4; //QT_ANEXO4*
            to.Cambio = from.Cambio; //VL_DOLAR*
            to.IndicadorOrdemFilaCasamento = from.IndicadorOrdemFilaCasamento; //IN_CASAORD*
            to.IndicadorOrdemAbertaAdminCon = from.IndicadorOrdemAbertaAdminCon; //IN_ADMIN_CON*
            to.NumeroOrdemOriginal = from.NumeroOrdemOriginal; //NR_SEQORD_ORI*

            //extras
            to.LoginOperador = from.LoginOperador;
            to.Saldo = from.Saldo;
            if (from.Cliente != null)
            {
                //to.CodigoCliente = from.Cliente.Codigo; //ja atribuido da TORMOVD.CD_CLIENTE
                to.ApelidoCliente = from.Cliente.Apelido;
                to.NomeCliente = from.Cliente.Nome;
                to.ComplementoNomeCliente = from.Cliente.ComplementoNome;
            }

            return to;
        }

        /// <summary>
        /// Data : 20/01/2008**
        /// Autor: Eduardo Sertorio
        /// Obs.: Criacao
        /// </summary>
        /// <param name="from"></param>
        /// <returns></returns>
        public static List<DataContract.Response.OrdemResponse> TranslateToOrdemResponseList(List<BusinessEntity.Ordem> from)
        {
            if (from == null)
                return null;

            List<DataContract.Response.OrdemResponse> to = new List<DataContract.Response.OrdemResponse>();

            foreach (BusinessEntity.Ordem fromItem in from)
            {

                DataContract.Response.OrdemResponse response = new DataContract.Response.OrdemResponse();
                response = TranslateToOrdemResponse(fromItem);
                to.Add(response);
            }

            return to;
        }

    }
}

